/**
 *
 */
package com.angel.mocks.data.generator.rowProcessorCommand;

import com.angel.common.helpers.StringHelper;
import com.angel.data.generator.annotations.Inject;
import com.angel.io.annotations.ColumnRow;
import com.angel.io.annotations.RowChecker;
import com.angel.io.annotations.RowProcessor;
import com.angel.io.annotations.RowProcessorCommand;
import com.angel.io.exceptions.InvalidRowDataException;
import com.angel.mocks.data.generator.daos.ExpedienteDAO;
import com.angel.mocks.data.generator.domainObject.Expediente;

/**
 * @author William
 *
 */
@RowProcessorCommand
	(
		columnsRow = {
			@ColumnRow( columnName = ExpedienteAnnotationRowProcessorCommand.NOMBRE_MUNICIPALIDAD_COLUMN, aliases = {"Nombre de la Municipalidad"} ),
			@ColumnRow( columnName = ExpedienteAnnotationRowProcessorCommand.NUMERO_COLUMN, aliases = {"Numero del expediente"} ),
			@ColumnRow( columnName = ExpedienteAnnotationRowProcessorCommand.CREADOR_COLUMN, aliases = {"Creador del Expediente"} ),
			@ColumnRow( columnName = ExpedienteAnnotationRowProcessorCommand.NOMBRE_MOTIVO_COLUMN, aliases = {"Nombre del Motivo"} ),
			@ColumnRow( columnName = ExpedienteAnnotationRowProcessorCommand.ALCANCE_COLUMN, aliases = {"Alcance"}, type = Integer.class )
		}
	)
public class ExpedienteAnnotationRowProcessorCommand {

	public static final String NOMBRE_MUNICIPALIDAD_COLUMN = "municipalidad";
	public static final String NUMERO_COLUMN = "numero";
	public static final String CREADOR_COLUMN = "creador";
	public static final String NOMBRE_MOTIVO_COLUMN = "nombreMotivo";
	public static final String ALCANCE_COLUMN = "alcance";

	@Inject
	private ExpedienteDAO expedienteDAO;

    @RowChecker(columnsParameters = {})
    public void checkRowData(String nombreMunicipalidad, String numero, String nombreCreador, String nombreMotivo, Integer alcance) throws InvalidRowDataException {
		boolean areAllNotEmpty = StringHelper.areAllNotEmpty(nombreMunicipalidad, numero, nombreCreador, nombreMotivo, alcance.toString());
		if(!areAllNotEmpty){
			throw new InvalidRowDataException("Some row data are NULL - " +
					"nombreMunicipalidad: [" + nombreMunicipalidad + "] - " +
					"numero: [" + numero + "] - " +
					"nombreCreador: [" + nombreCreador + "] - " +
					"nombreMotivo: [" + nombreMotivo + "] - " +
					"alcance: [" + alcance + "].");
		}
		Expediente expediente = this.getExpedienteDAO().buscarUnicoOrNuloPorNumero(numero);
		if(expediente != null){
			throw new InvalidRowDataException("Expediente exist with name [" + expediente + "].");
		}
    }

	@RowProcessor(columnsParameters = {}, object = Expediente.class, inject = true)
	public Expediente processRow(Expediente expediente, String nombreMunicipalidad, String numero, String nombreCreador, String nombreMotivo, Integer alcance) {
        return expediente;
    }

	/**
	 * @return the expedienteDAO
	 */
	public ExpedienteDAO getExpedienteDAO() {
		return expedienteDAO;
	}

	/**
	 * @param expedienteDAO the expedienteDAO to set
	 */
	public void setExpedienteDAO(ExpedienteDAO expedienteDAO) {
		this.expedienteDAO = expedienteDAO;
	}
}
